resourcebundle中文乱码(java:ResourceBundle rb=ResourceBundle.getBundle(“LocalString“);) 您所在的位置:网站首页 page language=java语法不正确 resourcebundle中文乱码(java:ResourceBundle rb=ResourceBundle.getBundle(“LocalString“);)

resourcebundle中文乱码(java:ResourceBundle rb=ResourceBundle.getBundle(“LocalString“);)

2023-03-29 11:41| 来源: 网络整理| 查看: 265

本文目录java:ResourceBundle rb=ResourceBundle.getBundle(“LocalString“);classloader来自哪个类JAVA 转码问题eclipse properties 有什么插件jsp开发不同语言乱码问题java中编码与解码分别指什么idea中使用Properties中文乱码解决如何实现网站的多语言版本怎么在eclipse中安装properties插件Java读取properties文件乱码,通过 newString(str.getBytes(),“UTF-8“)无法正确转换个别字符求更好的办法java:ResourceBundle rb=ResourceBundle.getBundle(“LocalString“);

使用ResourceBundle访问本地资源在设计时,我们往往需要访问一些适合本地修改的配置信息,如果作为静态变量,那么每次修改都需要重新编译一个class,.config保存此类信息并不适合,这时我们需要ResourceBundle。通过ResourceBundle,我们需要访问位于/WEB-INF/classes目录下的一个后缀名为properties的文本类型文件,从里面读取我们需要的值。Locale locale = Locale.getDefault();ResourceBundle localResource = ResourceBundle.getBundle(“ConnResource“, locale);String value = localResource.getString(“test“);System.out.println(“ResourceBundle: “ + value);这里对应了/WEB-INF/class/ConnResource.properties文件内容为:test=hello world打印出来的结果就是hello world

请注意,这里我们可以利用Locale和ResourceBundle的这个组合创建国际化的java程序。我们可以把locale实例化为new Locale(“zh“,“CN“);通过ResourceBundle.getBundle(“MessagesBundle“, locale);系统将自动寻找MessagesBundle_zh_CN,即定义为中国大陆地区简体中文。如果没有该文件,则会依次寻找MessagesBundle_zh,MessagesBundle,直到找到为止

classloader来自哪个类

ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的class对象。 1.1 几个相关概念ClassLoader负责载入系统的所有Resources(Class,文件,来自网络的字节流等),通过ClassLoader从而将资源载入JVM每个class都有一个reference,指向自己的ClassLoader。Class.getClassLoader()array的ClassLoader就是其元素的ClassLoader,若是基本数据类型,则这个array没有ClassLoader1.2 主要方法和工作过程Java1.1及从前版本中,ClassLoader主要方法:Class loadClass( String name, boolean resolve ); ClassLoader.loadClass() 是 ClassLoader 的入口点defineClass 方法是 ClassLoader 的主要诀窍。该方法接受由原始字节组成的数组并把它转换成 Class 对象。原始数组包含如从文件系统或网络装入的数据。findSystemClass 方法从本地文件系统装入文件。它在本地文件系统中寻找类文件,如果存在,就使用 defineClass 将原始字节转换成 Class 对象,以将该文件转换成类。当运行 Java 应用程序时,这是 JVM 正常装入类的缺省机制。resolveClass可以不完全地(不带解析)装入类,也可以完全地(带解析)装入类。当编写我们自己的 loadClass 时,可以调用 resolveClass,这取决于 loadClass 的 resolve 参数的值findLoadedClass 充当一个缓存:当请求 loadClass 装入类时,它调用该方法来查看 ClassLoader 是否已装入这个类,这样可以避免重新装入已存在类所造成的麻烦。应首先调用该方法一般load方法过程如下:调用 findLoadedClass 来查看是否存在已装入的类。如果没有,那么采用某种特殊的神奇方式来获取原始字节。(通过IO从文件系统,来自网络的字节流等)如果已有原始字节,调用 defineClass 将它们转换成 Class 对象。如果没有原始字节,然后调用 findSystemClass 查看是否从本地文件系统获取类。如果 resolve 参数是 true,那么调用 resolveClass 解析 Class 对象。如果还没有类,返回 ClassNotFoundException。否则,将类返回给调用程序。1.3 委托模型自从JDK1.2以后,ClassLoader做了改进,使用了委托模型,所有系统中的ClassLoader组成一棵树,ClassLoader在载入类库时先让Parent寻找,Parent找不到才自己找。JVM在运行时会产生三个ClassLoader,Bootstrap ClassLoader、Extension ClassLoader和App ClassLoader。其中,Bootstrap ClassLoader是用C++编写的,在Java中看不到它,是null。它用来加载核心类库,就是在lib下的类库,Extension ClassLoader加载lib/ext下的类库,App ClassLoader加载Classpath里的类库,三者的关系为:App ClassLoader的Parent是Extension ClassLoader,而Extension ClassLoader的Parent为Bootstrap ClassLoader。加载一个类时,首先BootStrap进行寻找,找不到再由Extension ClassLoader寻找,最后才是App ClassLoader。将ClassLoader设计成委托模型的一个重要原因是出于安全考虑,比如在Applet中,如果编写了一个java.lang.String类并具有破坏性。假如不采用这种委托机制,就会将这个具有破坏性的String加载到了用户机器上,导致破坏用户安全。但采用这种委托机制则不会出现这种情况。因为要加载java.lang.String类时,系统最终会由Bootstrap进行加载,这个具有破坏性的String永远没有机会加载。委托模型还带来了一些问题,在某些情况下会产生混淆,如下是Tomcat的ClassLoader结构图:Bootstrap

System

Common/Catalina Shared/Webapp1 Webapp2 ...由 Common 类装入器装入的类决不能(根据名称)直接访问由 Web 应用程序装入的类。使这些类联系在一起的唯一方法是通过使用这两个类集都可见的接口。在这个例子中,就是包含由 Java servlet 实现的 javax.servlet.Servlet。如果在lib或者lib/ext等类库有与应用中同样的类,那么应用中的类将无法被载入。通常在jdk新版本出现有类库移动时会出现问题,例如最初我们使用自己的xml解析器,而在jdk1.4中xml解析器变成标准类库,load的优先级也高于我们自己的xml解析器,我们自己的xml解析器永远无法找到,将可能导致我们的应用无法运行。相同的类,不同的ClassLoader,将导致ClassCastException异常1.4 线程中的ClassLoader每个运行中的线程都有一个成员contextClassLoader,用来在运行时动态地载入其它类,可以使用方法Thread.currentThread().setContextClassLoader(...);更改当前线程的contextClassLoader,来改变其载入类的行为;也可以通过方法Thread.currentThread().getContextClassLoader()来获得当前线程的ClassLoader。实际上,在Java应用中所有程序都运行在线程里,如果在程序中没有手工设置过ClassLoader,对于一般的java类如下两种方法获得的ClassLoader通常都是同一个this.getClass.getClassLoader();Thread.currentThread().getContextClassLoader();方法一得到的Classloader是静态的,表明类的载入者是谁;方法二得到的Classloader是动态的,谁执行(某个线程),就是那个执行者的Classloader。对于单例模式的类,静态类等,载入一次后,这个实例会被很多程序(线程)调用,对于这些类,载入的Classloader和执行线程的Classloader通常都不同。1.5 Web应用中的ClassLoader回到上面的例子,在Tomcat里,WebApp的ClassLoader的工作原理有点不同,它先试图自己载入类(在ContextPath/WEB-INF/...中载入类),如果无法载入,再请求父ClassLoader完成。由此可得:对于WEB APP线程,它的contextClassLoader是WebAppClassLoader对于Tomcat Server线程,它的contextClassLoader是CatalinaClassLoader1.6 获得ClassLoader的几种方法可以通过如下3种方法得到ClassLoaderthis.getClass.getClassLoader(); // 使用当前类的ClassLoaderThread.currentThread().getContextClassLoader(); // 使用当前线程的ClassLoaderClassLoader.getSystemClassLoader(); // 使用系统ClassLoader,即系统的入口点所使用的ClassLoader。(注意,system ClassLoader与根ClassLoader并不一样。JVM下system ClassLoader通常为App ClassLoader)1.7 几种扩展应用用户定制自己的ClassLoader可以实现以下的一些应用安全性。类进入JVM之前先经过ClassLoader,所以可以在这边检查是否有正确的数字签名等加密。java字节码很容易被反编译,通过定制ClassLoader使得字节码先加密防止别人下载后反编译,这里的ClassLoader相当于一个动态的解码器归档。可能为了节省网络资源,对自己的代码做一些特殊的归档,然后用定制的ClassLoader来解档自展开程序。把java应用程序编译成单个可执行类文件,这个文件包含压缩的和加密的类文件数据,同时有一个固定的ClassLoader,当程序运行时它在内存中完全自行解开,无需先安装动态生成。可以生成应用其他还未生成类的类,实时创建整个类并可在任何时刻引入JVM2.0 资源载入所有资源都通过ClassLoader载入到JVM里,那么在载入资源时当然可以使用ClassLoader,只是对于不同的资源还可以使用一些别的方式载入,例如对于类可以直接new,对于文件可以直接做IO等。 2.1 载入类的几种方法假设有类A和类B,A在方法amethod里需要实例化B,可能的方法有3种。对于载入类的情况,用户需要知道B类的完整名字(包括包名,例如“com.rain.B“)1. 使用Class静态方法 Class.forNameClass cls = Class.forName(“com.rain.B“);B b = (B)cls.newInstance();2. 使用ClassLoader/* Step 1. Get ClassLoader */ClassLoader cl; // 如何获得ClassLoader参考1.6/* Step 2. Load the class */Class cls = cl.loadClass(“com.rain.B“); // 使用第一步得到的ClassLoader来载入B

/* Step 3. new instance */B b = (B)cls.newInstance(); // 有B的类得到一个B的实例3. 直接newB b = new B();2.2 文件载入(例如配置文件等)假设在com.rain.A类里想读取文件夹 /com/rain/config 里的文件sys.properties,读取文件可以通过绝对路径或相对路径,绝对路径很简单,在Windows下以盘号开始,在Unix下以“/“开始对于相对路径,其相对值是相对于ClassLoader的,因为ClassLoader是一棵树,所以这个相对路径和ClassLoader树上的任何一个ClassLoader相对比较后可以找到文件,那么文件就可以找到,当然,读取文件也使用委托模型1. 直接IO/*** 假设当前位置是 “C:/test“,通过执行如下命令来运行A “java com.rain.A“* 1. 在程序里可以使用绝对路径,Windows下的绝对路径以盘号开始,Unix下以“/“开始* 2. 也可以使用相对路径,相对路径前面没有“/“* 因为我们在 “C:/test“ 目录下执行程序,程序入口点是“C:/test“,相对路径就* 是 “com/rain/config/sys.properties“* (例子中,当前程序的ClassLoader是App ClassLoader,system ClassLoader = 当前的* 程序的ClassLoader,入口点是“C:/test“)* 对于ClassLoader树,如果文件在jdk lib下,如果文件在jdk lib/ext下,如果文件在环境变量里,* 都可以通过相对路径“sys.properties“找到,lib下的文件最先被找到*/File f = new File(“C:/test/com/rain/config/sys.properties“); // 使用绝对路径//File f = new File(“com/rain/config/sys.properties“); // 使用相对路径InputStream is = new FileInputStream(f);如果是配置文件,可以通过java.util.Properties.load(is)将内容读到Properties里,Properties默认认为is的编码是ISO-8859-1,如果配置文件是非英文的,可能出现乱码问题。2. 使用ClassLoader/*** 因为有3种方法得到ClassLoader,对应有如下3种方法读取文件* 使用的路径是相对于这个ClassLoader的那个点的相对路径,此处只能使用相对路径*/InputStream is = null;is = this.getClass().getClassLoader().getResourceAsStream(“com/rain/config/sys.properties“); //方法1//is = Thread.currentThread().getContextClassLoader().getResourceAsStream(“com/rain/config/sys.properties“); //方法2//is = ClassLoader.getSystemResourceAsStream(“com/rain/config/sys.properties“); //方法3如果是配置文件,可以通过java.util.Properties.load(is)将内容读到Properties里,这里要注意编码问题。3. 使用ResourceBundleResourceBundle bundle = ResourceBundle.getBoundle(“com.rain.config.sys“);这种用法通常用来载入用户的配置文件,关于ResourceBunlde更详细的用法请参考其他文档总结:有如下3种途径来载入文件1. 绝对路径 ---》 IO2. 相对路径 ---》 IO---》 ClassLoader3. 资源文件 ---》 ResourceBundle2.3 如何在web应用里载入资源在web应用里当然也可以使用ClassLoader来载入资源,但更常用的情况是使用ServletContext,如下是web目录结构ContextRoot- JSP、HTML、Image等各种文件-- web.xml- Web用到的JAR文件- 类文件用户程序通常在classes目录下,如果想读取classes目录里的文件,可以使用ClassLoader,如果想读取其他的文件,一般使用ServletContext.getResource()如果使用ServletContext.getResource(path)方法,路径必须以“/“开始,路径被解释成相对于ContextRoot的路径,此处载入文件的方法和ClassLoader不同,举例“/WEB-INF/web.xml“,“/download/WebExAgent.rar“

JAVA 转码问题

那个数据库并不能自动地处理汉字,相当于它把所有数据当成单字节来处理,因此,数据倒底是什么取决于读取它的程序如何理解,数据库本身只负责保存 byte 而不是我们期望的 char。

US7ASCII  是单 byte,而汉字是至少双byte.

所以,如果不做任何转换的话,处理过程中写入和读出都要使用相同的字符集才能理解它,但我们不应该依然数据库服务器和应用服务器或操作系统的字符集是什么,如果不做转换就要求应用服务器,操作系统,数据库的操作系统这些地方都有一致的约定,而实际上这不现实,你不能要求客户的机器按你的要求做,它们现在用 US7ASCII 就表示它们以前有其它系统也用这个数据库,因此你不能再提出任何假设,只能自己用技术方法消化掉。

因此我们要在处理中将汉字保存到数据库之前就事先转换成纯粹的 ASCII 字符串,像 \u0A0c 啥的。String 有一个叫 codePoint 的数字,它是 Unicode Code Point,我们在判断它是非 ASCII 字符时 ( 》 256) 时通过翻译把它变成 \u0A0C 再保存,读取时发现了 \u0A0C 再翻译回来。

这本身就是我们在保存 Properties 文件时做的那样,记得 Struts 之类的那个 Properties ResourceBundle 么,我们在 命令行做 native2ascii 时就是这么做的,反编译一下 JDK 的 tools.jar 里面的那个类来看源码,这个转换其实很简单的,我们把 JDK native2ascii 功能嵌入到你的程序中,凡是可能包括汉字的字段(比如,名字,地址,描述)都来一次转换。

下面反编译它,写出(编码过程特简单),读出(解码过程略复杂)需要按长度来试探,并且在未读取完整时把余下的零头先缓存起来,等后面几个字节读取出来之后再拼起来尝试是否是一个\u 开头的符号。当然就算看不明白也没关系,把这段代码的变量改个名字原样贴到你的代码中用就行了,只是我们需要修改那个 Main.class,因为它是命令行程序,有一个 System.exit() 调用需要去掉,另外把收集参数的地方改成我们直接传入参数。

eclipse properties 有什么插件

资源文件 即 .properties 文件是常用于国际化;eclipse默认的 .properties 文件器有几个问题:编码问题多种语言同步问题下面介绍2种eclipse的 .properties 文件的插件,可以方便的 .properties 文件

(1) PropEditPropEdit,可以解决 编码问题,也就是说它可以自动将各种语言转化成所需的编码格式

安装方法(更新方式):利用eclipse的更新功能,地址为 htt p:/ /propedit.sourceforg e.j p/eclipse/updates/注意:最新的 propedit 不支持 myeclipse6.5 ,必须 下载旧版的进行安装;htt p:/ /sourceforge.j p/projects/propedit/downloads/36845/jp.gr.ja va_conf.ussiy.app.propedit_5.0.1.zip

(2)JIntoJInto 可以同时解决 编码问题 和 多种语言同步问题

安装方法(link方式):* 下载包,地址:htt p:/ /ww w.guh-software.de/jinto_e n.h tml* 下面以安装在 d:/myeclipse6.5/ext-link/ 目录下为例* 首先在 d:/myeclipse6.5/ext-link/ 下建立一个目录,名为 “jinto”* 解压 下载的包,可以看到包下有 “eclipse”目录,“eclipse”目录下又有“plugins”和“features”目录;* 将 “eclipse”目录放到“jinto”目录下* 新建1个link文件,名为 jinto.link ,放在 eclipse安装的根目录下的 link文件夹里;* jinto.link 里写1行内容,即 “path=d:/myeclipse6.5/ext-link/jinto”* 重启 eclipse或myeclipse

(3)设置默认的 .properties文件器eclipse中, window-》preferences-》General-》Editors-》File Asssociations ,找到 .properties ,选中相应的器,点击 “default”按钮;其中 “jinto”对应的器名是“Java ResourceBundle Editor” ,“ PropEdit”对应的器名是“PropertiesEditor”

jsp开发不同语言乱码问题

页面属性里要设置《%@ page contentType=“text/html;“%》,charset后面是语言相对的字符集,比如中文是GBK日文是shift-jis。这个是页面字符的定义。这个可以正确显示静态页面内的字符,如果是页面间有参数传递就要指明参数的字符集,页面参数传递时的乱码的解决方法是(假如传递STR)需要指定参数的字符编码,具体方法:《%String c=new String (request.getParameter(“STR“).getBytes(“iso-8859-1“),“gbk“)%》。servlet处理参数的乱码的对策在servlet里添加response.setContentType(“text/html;charset=gbk“); 用utf-8不能解决乱码问题,现在这个办法我试过了,因为我是日文系统,用上述方法现在日文的乱码问题已经都解决了。你先试试看。

java中编码与解码分别指什么

java中编码:URLEncoder.encode(strUri,“utf-8“);

java中解码码:URLDecoder.decode(strUri,“utf-8“);

java编码和解码         

流读取文件,具有转换编码功能的有:OutputStreamWriter和InputStreamReader,

构造器有如:

InputStreamReader(InputStream in, String charsetName)

创建使用指定字符集的 InputStreamReader。

OutputStreamWriter(OutputStream out, String charsetName)

创建使用指定字符集的 OutputStreamWriter。

处理字符串编码问题:

重新对获取的字符串进行编码:Byte bytes = str.getBytes(String encodeCharsetNam);

重新对bytes进行解码,创建新的字符串对象:str = new String(Byte bytes,String decodeCharsetName);

一般结合使用:str = new String(str.getBytes(String encodeCharsetName),String decodeCharsetName);

例如:resultName=new String(username.getBytes(“ISO-8859-1“),“UTF-8“);

还可以加入判断:

if(!Charset.forName(“gbk“).newEncoder().canEncode(str)){str = new Strin(str.getBytes(“ISO-8859-1“),“UTF-8“);}else{str = new String(str.getBytes(“ISO-8859-1“),“gbk“);}

处理请求参数传递编码问题:

java中编码:URLEncoder.encode(strUri,“utf-8“);

java中解码码:URLDecoder.decode(strUri,“utf-8“);

js中编码:encodeURIComponent(strUri);encodeURI(strUri);escape(str);

js中解码:decodeURIComponent(strUri);decodeURI(strUri);unescape(str);

补充概念:

URI组件:主机、端口、路径、查询参数、片段等。

URI组件分隔符::/?#&@,冒号用于分隔协议和主机,/用于分隔主机和 路径,?用于分隔路径和查询参数,&用于分隔多个查询参数等。

URI中的不安全字符或保留字符: ! * ‘ ( ) ; : @ & = + $ , / ? # 他们具有特殊作用,例如上面的分隔作用。

URI允许出现的字符:只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符,其他字符均需要经过编码之后才能出现在Url中,比如使用保留字符的原意,而不是特殊作用。

js向java/jsp的编码与解码:

js中编码:encodeURI(encodeURI(strUri));decodeURIComponent(decodeURIComponent(strUri));

java/jsp中解码: java.net.URLDecoder.decode(strUri,“UTF-8“);

js中编码两次的问题:如果使用一次编码,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码值,两位两位取出后进行解码。

然后再传递给处理页面,然后由处理页面进行再次解码,这样前面就缺少了一次编码过程,所以前面需要连续两次编码。

idea中使用Properties中文乱码解决

只需要在Setting中找到File Encodings就可以解决Properties乱码问题

首先创建一个名为test,文件类型为properties的文件,然后,在src下直接创建,其次在内部存入下面的值!

然后创建一个class文件

案例二:没有直接在src下创建,而是在src下创建了一个包,包名为Work,然后在包下创建test.properties文件

然后创建一个Class文件

首先,创建properties文件,properties文件还是上方的那两个,就不多写了!直接获取src直属目录下的Properties文件,使用ResuourceBundle的时候,并不需要给文件的后缀,只需要给文件名就可以了。

二,使用ResourceBundle获取其他包下的Properties文件

如何实现网站的多语言版本

多语言网站,顾名思义就是能够以多种语言(而不是单种语言)为用户提供信息服务,让使用不同语言的用户都能够从同个网站获得内容相同的信息。多语言网站实现方案1,静态:就是为每种语言分别准备一套页面文件,要么通过文件后缀名来区分不同语言,要么通过子目录来区分不同语言。例如对于首页文件index_en.htm提供英语界面,index_gb.htm提供简体中文界面,index_big.htm提供繁体中文界面,或者是en/index.htm提供英语界面,gb/index.htm提供简体中文界面,big/index.htm提供繁体中文界面,一旦用户选择了需要的语言后,自动跳转到相应的页面,首页以下其他链接也是按照同样方式处理。从维护的角度来看,通过子目录比通过文件后缀名来区分不同语言版本显得要简单明了。2,动态:站点内所有页面文件都是动态页面文件(PHP,ASP等)而不是静态页面文件,在需要输出语言文字的地方统一采用语言变量来表示,这些语言变量可以根据用户选择不同的语言赋予不同的值,从而能够实现在不同的语言环境下输出不同的文字。例如:语言变量ln_name,当用户选择的语言是英语时赋值为“Name”,当用户选择的语言是简体中文时赋值为“姓名”,这样就可以适应不同语言时的输出。采用静态方式的优点是页面直接输出到客户端,不需要在服务器上运行,占用服务器的资源比较少,系统能够支持的并发连接数较多,缺点是要为每种语言制作一套页面文件,很多内容即使是和语言无关的也要分不同语言来存储,因此占用的存储空间较多。采用动态方式和静态方式的优缺点正好相反,它的优点是动态页面文件只有一套,不同语言的文字使用语言变量来存储,和语言无关的内容只存储一份,占用的存储空间较少,并且扩展新语言比较容易,缺点需要在服务器上运行,然后把结果输入到客户端,占用服务器的资源比较多,系统能够支持的并发连接数较少。动态数据存贮涉及的一些技术问题由于现在网站上动态应用日益增多,相当多的网站还会使用文件或者数据库来存储应用信息,因此如果文件或者数据库中存储的内容与语言相关时,还需要特别注意。对于存储在数据库中信息,可以采取以下几种方式支持多语言:1,在数据库级别支持多语言:为每种语言建立独立的数据库,不同语言的用户操作不同的数据库。2,在表级别支持多语言:为每种语言建立独立的表,不同语言的用户操作不同的表,但是它们在同一个数据库中。3,在字段级别支持多语言:在同一个表中为每种语言建立独立的字段,不同语言的用户操作不同的字段,它们在同一个表中。由于数据库中有大量的信息(如标志,编码,数字等)是用于内部处理使用的,与语言无关的,因此在数据库级别支持多语言会导致空间的极大浪费,在字段级别支持多语言最大的问题是一旦需要支持新的语言,由于需要修改表结构,维护起来非常麻烦,可扩展性不好。相比之下,在表级别支持多语言比较好,因为并不是所有的表都需要支持多语言,对于与语言无关的表,不同语言的用户共用一套,那些和语言相关的表根据支持语言的种类来建立,不同语言的用户存取访问不同的表格。这样使得维护简单,节省了存储空间,即使是扩展起来也比较方便,只要把需要支持多语言的表,多建立一套即可。还需要注意的问题是:有些表中某些字段是不同语言版本的表共享的(例如库存量),由于各种语言的表之间的相对独立性,使得数据共享有些困难。解决的方法有两个:1,不同语言的表的共享字段同步:也就是说,只要修改了其中一个表的共享字段,其他语言表中该字段也作相应改变,实际上当不同语言的用户同时访问时处理还是比较麻烦的,并且扩充新语言时修改工作比较大。2,增加一个新的表:把所有语言共享的字段(例如货物编号,产地编码等)全部放在这个表,支持多语言的表只存放与各种语言相关的字段。不同语言的用户在使用数据库时,需要操作两个数据表。比较而言,第二种方法比较简单,并且效率比较高,维护也比较方便。应用字符集的选择一个定位于不同语言国家的企业网站势必需要提供多种语言版本的产品和销售信息来满足其世界各地使用不同语言的客户和合作伙伴,其中包括法语、德语、意大利语、葡萄牙语、西班牙语、阿拉伯语等等。但有一个问题却极易被网站设计者们所忽略。这就是网站的字符集设置问题。一般我们使用的是简体中文(GB2312)字符集,而对多语言网站来说,中文字符集却可能会使你辛辛苦苦的努力功亏一篑。原因很简单:就是这个毫不起眼的小小字符集在作怪。计算机应用领域中存在着几十种互不相同的字符集,而不同语言客户在浏览不同语言网页时,往往会因为相互间所使用字符集无法兼容而出现乱码情况。我们在浏览国外一些网站时,往往也会出现为了能正常地看到网站上的信息而不得不在各种字符集之间来回切换的情况。试想一下:如果一个网站提供了中,英,法,德等多种语言版本的内容,内容全之又全,设计美仑美奂。我们在中文编码环境下浏览这些非中文版本的页面觉得非常完美,现在一个法国客户对你的产品发生了兴趣,当他进到法语版面一看—乱码多多,甚至可能整个版面都一塌里糊涂。你的网站再下大工夫又有什么意义呢?所以对提供了多语言版本的网站来说,Unicode字符集应该是最理想的选择。它是一种双字节编码机制的字符集,不管是东方文字还是西方文字,在Unicode中一律用两个字节来表示,因而至少可以定义65536个不同的字符,几乎可以涵盖世界上目前所有通用的语言的每一种字符。 所以在设计和开发多语言网站时,一定要注意先把非中文页面的字符集定义为“utf-8”格式。这一步非常重要,原因在于若等页面做好之后再更改字符集设置,可说是一件非常非常吃力不讨好的工作,有时候甚至可能需要从头再来,重新输入网站的文字内容。HTML中的META标签:《META HTTP-EQUIV=“Content-Type” CONTENT=“text/html; CHARSET=字符集“》不写,根据浏览器默认字符集显示charset=gb2312 简体中文charset=big5 繁体中文charset=EUC_KR 韩语charset=Shift_JIS 或 EUC_JP 日语charset= KOI8-R / Windows-1251 俄语charset=iso-8859-1 西欧语系(荷兰语,英语,法语,德语,意大利语,挪威语,葡萄牙语,瑞士语.等十八种语言) 即:《%@LANGUAGE=“VBSCRIPT“ CODEPAGE=“65001“%》《meta http-equiv=“Content-Type“ content=“text/html; charset=utf-8“ /》

怎么在eclipse中安装properties插件

在eclipse中编写properties文件时,如果直接写中文,它不会自动转换成ASCII编码,在浏览器中就会显示为乱码,通过安装properties插件可以解决这个问题。步骤如下:1、在eclipse中点击“help”-“Install New Software“。2、点击右侧的“Add”按钮。3、输入Name:propertiesLocation:输入下载链接然后点击OK。4、出现插件列表后,选择PropertiesEditor,然后Next。5、继续Next。6、点击“I accept ……”,然后Finish,然后插件就开始安装了。7、安装完成后点击“Restart Now”重启eclipse。8、此时在properties文件上点右键,点击“Open With“-“PropertiesEditor“,打开文件,现在就可以直接输入中文了,再看一下页面效果,已经不再是乱码了。

Java读取properties文件乱码,通过 newString(str.getBytes(),“UTF-8“)无法正确转换个别字符求更好的办法

你用这个不合适吧、、、newString(str.getBytes(),“UTF-8“)UTF-8在页面时候比较合适~~~在控制台输出出来可能会是乱码你换成 newString(str.getBytes(),“gb2312“) 试下 希望对你有帮助



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有